<?php
/**
 * advString.php
 * -
 * Advanced String class for PHP.
 *
 * PHP Version 5.2
 *
 * @package adv-types
 * @author  David Mézière <david@meziere.eu>
 * @license http://opensource.org/licenses/mit-license.php
 *
 */

/**
 * Advanced Sring class for PHP.
 * 
 * @author dmeziere
 * @package adv-types
 */
class advString extends advType
{
	
	
	protected
		$_value = null;
		
	const
		ENC_QP = 1,
		ENC_UU = 2;

	/**
	 * The class's constructor. Initialises the advString with the value passed 
	 * as parameter.
	 * 
	 * @param String $value
	 * 
	 * @return advString This, for chaining.
	 */
	public function __construct($value)
	{
		$this->_value = (string)$value;
		
		return $this;
	}

	
	/**************************************************************************
	 * Fonctions d'origine PHP                                                *
	 *************************************************************************/
	

	/**
	 * Ajoute des slash dans une chaîne, à la mode du langage C.
	 * 
	 * @see http://www.php.net/manual/fr/function.addcslashes.php
	 */
    public function addcslashes($charlist)
    {
    	return addcslashes($this->_value, $charlist);
    }
    
    
    /**
     * Ajoute des antislashs dans une chaîne.
     * 
     * @see http://www.php.net/manual/fr/function.addslashes.php
     */
    public function addslashes()
    {
    	return addslashes($this->_value);
    }
    
    
    /**
     * Convertit des données binaires en représentation hexadécimale.
     * 
     * @see http://www.php.net/manual/fr/function.bin2hex.php
     */
    public function bin2hex()
    {
    	return bin2hex($this->_value);
    }
    
    
    /**
     * Alias de rtrim.
     * 
     * @see http://www.php.net/manual/fr/function.chop.php
     */
    public function chop($charlist = null)
    {
    	return chop($this->_value, $charlist);
    }
    
    
    /**
     * Retourne un caractère à partir de son code ASCII.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.chr.php
     */
    public function chr()
    {
    	
    }

    
    /**
     * Scinde une chaîne.
     * 
     * @see http://www.php.net/manual/fr/function.chunk-split.php
     */
    public function chunk_split($chunklen = 76, $end = "\r\n")
    {
    	return chunk_split($this->_value, $chunklen, $end);
    }
    
    
    /**
     * Convertit une chaîne d'un jeu de caractères cyrillique à l'autre.
     * 
     * @see http://www.php.net/manual/fr/function.convert-cyr-string.php
     */
    public function convert_cyr_string($from, $to)
    {
    	return convert_cyr_string($this->_value, $from, $to);
    }
    
    
    /**
     * Décode une chaîne au format uuencode.
     * 
     * @see http://www.php.net/manual/fr/function.convert-uudecode.php
     */
    public function convert_uudecode()
    {
    	return convert_uudecode($this->_value);
    }
    
    
    /**
     * Encode une chaîne de caractères en utilisant l'algorithme uuencode.
     * 
     * @see http://www.php.net/manual/fr/function.convert-uuencode.php
     */
    public function convert_uuencode()
    {
    	return convert_uuencode($this->_value);
    }

    
    /**
     * Retourne des statistiques sur les caractères utilisés dans une chaîne.
     * 
     * @see http://www.php.net/manual/fr/function.count-chars.php
     */
    public function count_chars($mode = 0)
    {
    	return count_chars($mode);
    }
    
    
    /**
     * Calcule la somme de contrôle CRC32.
     * 
     * @see http://www.php.net/manual/fr/function.crc32.php
     */
    public function crc32()
    {
    	return crc32($this->_value);
    }
    
    
    /**
     * Hachage à sens unique (indéchiffrable).
     * 
     * @see http://www.php.net/manual/fr/function.crypt.php
     */
    public function crypt($salt = null)
    {
    	return crypt($this->_value, $salt);
    }
    
    
    /**
     * Affiche une chaîne de caractères.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.echo.php
     *-/
    public function echo()
    {
    	
    } */
    
    
    /**
     * Coupe une chaîne en segments.
     * 
     * @see http://www.php.net/manual/fr/function.explode.php
     */
    public function explode($delimiter, $limit = null)
    {
    	return explode($delimiter, $this->_value, $limit);
    }
    
    
    /**
     * Écrit une chaîne formatée dans un flux.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.fprintf.php
     */
    public function fprintf()
    {
    	
    }
    
    
    /**
     * Retourne la table de traduction des entités utilisée par htmlspecialchars et htmlentities.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.get-html-translation-table.php
     */
    public function get_html_translation_table()
    {
    	
    } 
    
    
    /**
     * Convertit un texte logique hébreux en texte visuel.
     * 
     * @see http://www.php.net/manual/fr/function.hebrev.php
     */
    public function hebrev($max_chars_per_line = 0)
    {
    	return hebrev($this->_value, $max_chars_per_line);
    }
    
    
    /**
     * Convertit un texte logique hébreux en texte visuel, avec retours à la ligne.
     * 
     * @see http://www.php.net/manual/fr/function.hebrevc.php
     */
    public function hebrevc($max_chars_per_line = 0)
    {
    	return hebrevc($this->_value, $max_chars_per_line);
    }
    
    
    /**
     * Convertit toutes les entités HTML en caractères normaux.
     * 
     * @see http://www.php.net/manual/fr/function.html-entity-decode.php
     */
    public function html_entity_decode($quote_style = ENT_COMPAT, $charset = null)
    {
    	return html_entity_decode($this->_value, $quote_style, $charset);
    }
    
    
    /**
     * Convertit tous les caractères éligibles en entités HTML.
     * 
     * @see http://www.php.net/manual/fr/function.htmlentities.php
     */
    public function htmlentities($flags = ENT_COMPAT, $charset = null, $double_encode = true)
    {
    	return htmlentities($this->_value, $flags, $charset, $double_encode);
    }
    
    
    /**
     * Convertit les entités HTML spéciales en caractères.
     * 
     * @see http://www.php.net/manual/fr/function.htmlspecialchars-decode.php
     */
    public function htmlspecialchars_decode($quote_style = ENT_COMPAT)
    {
    	return htmlspecialchars_decode($this->_value, $quote_style);
    }
    
    
    /**
     * Convertit les caractères spéciaux en entités HTML.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.htmlspecialchars.php
     */
    public function htmlspecialchars()
    {
    	
    }
    
    
    /**
     * Rassemble les éléments d'un tableau en une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.implode.php
     */
    public function implode()
    {
    	
    }
    
    
    /**
     * Alias de implode.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.join.php
     */
    public function join()
    {
    	
    }
    
    
    /**
     * Met le premier caractère en minuscule.
     * 
     * @see http://www.php.net/manual/fr/function.lcfirst.php
     */
    public function lcfirst()
    {
    	return lcfirst($this->_value);
    }
    
    
    /**
     * Calcule la distance Levenshtein entre deux chaînes.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.levenshtein.php
     */
    public function levenshtein()
    {
    	
    }
    
    
    /**
     * Lit la configuration locale.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.localeconv.php
     */
    public function localeconv()
    {
    	
    }
    
    
    /**
     * Supprime les espaces (ou d'autres caractères) de début de chaîne.
     * 
     * @see http://www.php.net/manual/fr/function.ltrim.php
     */
    public function ltrim($charlist = null)
    {
    	return ltrim($this->_value, $charlist);
    }
    
    
    /**
     * Calcule le md5 d'un fichier.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.md5-file.php
     */
    public function md5_file()
    {
    	
    }
    
    
    /**
     * Calcule le md5 d'une chaîne.
     * 
     * @see http://www.php.net/manual/fr/function.md5.php
     */
    public function md5($raw_output = false)
    {
    	return md5($this->_value, $raw_output);
    }
    
    
    /**
     * Calcule la clé metaphone.
     * 
     * @see http://www.php.net/manual/fr/function.metaphone.php
     */
    public function metaphone($phonemes = 0)
    {
    	return metaphone($this->_value, $phonemes);
    }
    
    
    /**
     * Met un nombre au format monétaire.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.money-format.php
     */
    public function money_format()
    {
    	
    }
    
    
    /**
     * Rassemble des informations sur la langue et la configuration locale.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.nl-langinfo.php
     */
    public function nl_langinfo()
    {
    	
    }
    
    
    /**
     * Insère un retour à la ligne HTML à chaque nouvelle ligne.
     * 
     * @see http://www.php.net/manual/fr/function.nl2br.php
     */
    public function nl2br($is_xhtml = true)
    {
    	return nl2br($this->_value, $is_xhtml);
    }
    
    
    /**
     * Formate un nombre pour l'affichage.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.number-format.php
     */
    public function number_format()
    {
    	
    }
    
    
    /**
     * Retourne le code ASCII d'un caractère.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.ord.php
     */
    public function ord()
    {
    	
    }
    
    
    /**
     * Analyse une requête HTTP.
     * 
     * @see http://www.php.net/manual/fr/function.parse-str.php
     */
    public function parse_str(&$arr = null)
    {
    	return parse_str($this->_value, $arr);
    }
    
    
    /**
     * Affiche une chaîne de caractères.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.print.php
     *-/
    public function print()
    {
    	
    } */
    
    
    /**
     * Affiche une chaîne de caractères formatée.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.printf.php
     */
    public function printf()
    {
    	
    }
    
    
    /**
     * Convertit une chaîne quoted-printable en chaîne 8 bits.
     * 
     * @see http://www.php.net/manual/fr/function.quoted-printable-decode.php
     */
    public function quoted_printable_decode()
    {
    	return quoted_printable_decode($this->_value);
    }
    
    
    /**
     * Convertit une chaîne 8 bits en une chaîne quoted-printable.
     * 
     * @see http://www.php.net/manual/fr/function.quoted-printable-encode.php
     */
    public function quoted_printable_encode()
    {
    	return quoted_printable_encode($this->_value);
    }
    
    
    /**
     * Protège les métacaractères.
     * 
     * @see http://www.php.net/manual/fr/function.quotemeta.php
     */
    public function quotemeta()
    {
    	return quotemeta($this->_value);
    }
    
    
    /**
     * Supprime les espaces (ou d'autres caractères) de fin de chaîne.
     * 
     * @see http://www.php.net/manual/fr/function.rtrim.php
     */
    public function rtrim($charlist = null)
    {
    	return rtrim($this->_value, $charlist);
    }
    
    
    /**
     * Modifie les informations de localisation.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.setlocale.php
     */
    public function setlocale()
    {
    	
    }
    
    
    /**
     * Calcule le sha1 d'un fichier.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.sha1-file.php
     */
    public function sha1_file()
    {
    	
    }
    
    
    /**
     * Calcule le sha1 d'une chaîne de caractères.
     * 
     * @see http://www.php.net/manual/fr/function.sha1.php
     */
    public function sha1($raw_output = false)
    {
    	return sha1($this->_value, $raw_output);
    }
    
    
    /**
     * Calcule la similarité de deux chaînes.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.similar-text.php
     */
    public function similar_text()
    {
    	
    }
    
    
    /**
     * Calcule la clé soundex.
     * 
     * @see http://www.php.net/manual/fr/function.soundex.php
     */
    public function soundex()
    {
    	return soundex($this->_value);
    }
    
    
    /**
     * Retourne une chaîne formatée.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.sprintf.php
     */
    public function sprintf()
    {
    	
    }
    
    
    /**
     * Analyse une chaîne à l'aide d'un format.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.sscanf.php
     */
    public function sscanf()
    {

    }
    
    
    /**
     * Analyse une chaîne de caractères CSV dans un tableau.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.str-getcsv.php
     */
    public function str_getcsv()
    {
    	
    }
    
    
    /**
     * Version insensible à la casse de str_replace.
     * 
     * @see http://www.php.net/manual/fr/function.str-ireplace.php
     */
    public function str_ireplace($search, $replace, &$count = null)
    {
    	return str_ireplace($search, $replace, $this->_value, $count);
    }
    
    
    /**
     * Complète une chaîne jusqu'à une taille donnée.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.str-pad.php
     */
    public function str_pad()
    {
    	
    }
    
    
    /**
     * Répète une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.str-repeat.php
     */
    public function str_repeat()
    {
    	
    }
    
    
    /**
     * Remplace toutes les occurrences dans une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.str-replace.php
     */
    public function str_replace()
    {
    	
    }
    
    
    /**
     * Effectue une transformation ROT13.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.str-rot13.php
     */
    public function str_rot13()
    {
    	
    }
    
    
    /**
     * Mélange les caractères d'une chaîne de caractères.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.str-shuffle.php
     */
    public function str_shuffle()
    {
    	
    }
    
    
    /**
     * Convertit une chaîne de caractères en tableau.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.str-split.php
     */
    public function str_split()
    {
    	
    }
    
    
    /**
     * Compte le nombre de mots utilisés dans une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.str-word-count.php
     */
    public function str_word_count()
    {
    	
    }
    
    
    /**
     * Comparaison insensible à la casse de chaînes binaires.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strcasecmp.php
     */
    public function strcasecmp()
    {
    	
    }
    
    
    /**
     * Alias de strstr.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strchr.php
     */
    public function strchr()
    {
    	
    }
    
    
    /**
     * Comparaison binaire de chaînes.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strcmp.php
     */
    public function strcmp()
    {
    	
    }
    
    
    /**
     * Comparaison de chaînes localisées.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strcoll.php
     */
    public function strcoll()
    {
    	
    }
    
    
    /**
     * Trouve un segment de chaîne ne contenant pas certains caractères.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strcspn.php
     */
    public function strcspn()
    {
    	
    }
    
    
    /**
     * Supprime les balises HTML et PHP d'une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strip-tags.php
     */
    public function strip_tags()
    {
    	
    }
    
    
    /**
     * Décode une chaîne encodée avec addcslashes.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.stripcslashes.php
     */
    public function stripcslashes()
    {
    	
    }
    
    
    /**
     * Recherche la première occurrence dans une chaîne, sans tenir compte de la casse.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.stripos.php
     */
    public function stripos()
    {
    	
    }
    
    
    /**
     * Supprime les antislashs d'une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.stripslashes.php
     */
    public function stripslashes()
    {
    	
    }
    
    
    /**
     * Version insensible à la casse de strstr.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.stristr.php
     */
    public function stristr()
    {
    	
    }

    
    /**
	 * Calcule la taille d'une chaîne.
	 * 
	 * @see http://fr.php.net/manual/fr/function.strlen.php
	 * 
	 * @return Integer Character length of the advString
	 */
	public function strlen()
	{
		return strlen($this->_value);
	}


	/**
	 * Comparaison de chaînes avec l'algorithme d'"ordre naturel" (insensible à la casse).
	 * 
     * Non-implémenté.
	 * 
	 * @see http://www.php.net/manual/fr/function.strnatcasecmp.php
	 */
    public function strnatcasecmp()
    {
    	
    }
    
    
    /**
     * Comparaison de chaînes avec l'algorithme d'"ordre naturel".
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strnatcmp.php
     */
    public function strnatcmp()
    {
    	
    }
    
    
    /**
     * Compare en binaire des chaînes de caractères.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strncasecmp.php
     */
    public function strncasecmp()
    {
    	
    }
    
    
    /**
     * Comparaison binaire des n premiers caractères.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strncmp.php
     */
    public function strncmp()
    {
    	
    }
    
    
    /**
     * Recherche une chaîne de caractères dans un ensemble de caractères.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strpbrk.php
     */
    public function strpbrk()
    {
    	
    }
    
    
    /**
     * Trouve la position d'un caractère dans une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strpos.php
     */
    public function strpos()
    {
    	
    }
    
    
    /**
     * Trouve la dernière occurrence d'un caractère dans une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strrchr.php
     */
    public function strrchr()
    {
    	
    }
    
    
    /**
     * Inverse une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strrev.php
     */
    public function strrev()
    {
    	
    }
    
    
    /**
     * Trouve la position de la dernière occurrence d'une chaîne dans une autre, de façon insensible à la casse.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strripos.php
     */
    public function strripos()
    {
    	
    }
    
    
    /**
     * Trouve la position de la dernière occurrence d'une sous-chaine dans une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strrpos.php
     */
    public function strrpos()
    {
    	
    }
    
    
    /**
     * Trouve la longueur du premier segment d'une chaîne contenant tous les caractères d'un masque donné.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strspn.php
     */
    public function strspn()
    {
    	
    }
    
    
    /**
     * Trouve la première occurrence dans une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strstr.php
     */
    public function strstr()
    {
    	
    }
    
    
    /**
     * Coupe une chaîne en segments.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strtok.php
     */
    public function strtok()
    {
    	
    }

    
    /**
     * Renvoie une chaîne en minuscules.
     * 
     * @see http://www.php.net/manual/fr/function.strtolower.php
     * 
     * @return String Lower case version of the advString
     */
    public function strtolower()
    {
        return strtolower($this->_value);
    }

    
	/**
	 * Renvoie une chaîne en majuscules.
	 * 
	 * @see http://www.php.net/manual/fr/function.strtoupper.php
	 * 
	 * @return String Uppe case version of advString
	 */
    public function strtoupper()
    {
		return strtoupper($this->_value);        
    }

    
    /**
     * Remplace des caractères dans une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.strtr.php
     */
    public function strtr()
    {
    	
    }
    
    
    /**
     * Compare deux chaînes depuis un offset jusqu'à une longueur en caractères.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.substr-compare.php
     */
    public function substr_compare()
    {
    	
    }
    
    
    /**
     * Compte le nombre d'occurrences de segments dans une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.substr-count.php
     */
    public function substr_count()
    {
    	
    }
    
    
    /**
     * Remplace un segment dans une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.substr-replace.php
     */
    public function substr_replace()
    {
    	
    }
    
    
    /**
     * Retourne un segment de chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.substr.php
     */
    public function substr()
    {
    	
    }
    
    
    /**
     * Supprime les espaces (ou d'autres caractères) en début et fin de chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.trim.php
     */
    public function trim()
    {
    	
    }

    
    /**
     * Met le premier caractère en majuscule.
     * 
     * @see http://www.php.net/manual/fr/function.ucfirst.php
     * 
     * @return String Capitalized version of the advString
     */
    public function ucfirst()
    {
        return ucfirst($this->_value);
    }


    /**
     * Met en majuscule la première lettre de tous les mots.
     * 
     * @see http://fr.php.net/manual/fr/function.ucwords.php
     * 
     * @return String Title version of the advString
     */
    public function ucwords()
    {
        return ucwords($this->_value);
    }
    
    
    /**
     * Écrit une chaîne formatée dans un flux.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.vfprintf.php
     */
    public function vfprintf()
    {
    	
    }
    
    
    /**
     * Affiche une chaîne formatée.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.vprintf.php
     */
    public function vprintf()
    {
    	
    }
    
    
    /**
     * Retourne une chaîne formatée.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.vsprintf.php
     */
    public function vsprintf()
    {
    	
    }
    
    
    /**
     * Effectue la césure d'une chaîne.
     * 
     * Non-implémenté.
     * 
     * @see http://www.php.net/manual/fr/function.wordwrap.php
     */
    public function wordwrap()
    {
    	
    }
    
    
    /**************************************************************************
	 * Fonctions inspirées de Python                                          *
	 *************************************************************************/
	

	/**
	 * Return a copy of the string with its first character capitalized and the rest lowercased.
	 * 
	 * @see http://docs.python.org/library/stdtypes.html#str.capitalize
	 */
    public function capitalize()
    {
    	return $this->ucfirst();
    }
	
    
    /**
     * Return a copy of the string converted to lowercase.
     * 
     * @see http://docs.python.org/library/stdtypes.html#str.lower
     */
	public function lower()
    {
    	return $this->strtolower();
    }
	
	
    /**
     * Return a titlecased version of the string where words start with an uppercase character and the remaining characters are lowercase.
     * 
     * @see http://docs.python.org/library/stdtypes.html#str.title
     */
    public function title()
    {
    	return $this->ucwords();
    }
    

    /**
     * Return a copy of the string converted to uppercase.
     * 
     * @see http://docs.python.org/library/stdtypes.html#str.upper
     */
    public function upper()
    {
    	return $this->strtoupper();
    }
	
	
    /**
	 * Checks wether the advString starts with $haystack. This method is issued 
	 * from the usefull Python method of the same name.
	 * 
	 * @see http://docs.python.org/library/stdtypes.html#str.startswith
	 * 
	 * @param String $haystack
	 * 
	 * @return Boolean true if the advString starts with $haystack
	 */
	public function startsWith($haystack)
	{
		if(substr($this->_value, 0, strlen($haystack)) == $haystack) {
			return true;
		} else {
			return false;
		}
	}


	/**
	 * Checks wether the advString ends with $haystack. This method is issued 
	 * from the usefull Python method of the same name.
	 * 
	 * @see http://docs.python.org/library/stdtypes.html#str.endswith
	 * 
	 * @param String $haystack
	 * 
	 * @return Boolean True if the advString ends with $haystack
	 */
	public function endsWith($haystack)
	{
		if(substr($this->_value, 0 - strlen($haystack)) == $haystack) {
			return true;
		} else {
			return false;
		}
	}


	/**************************************************************************
	 * Fonctions maison                                                       *
	 *************************************************************************/
	
	
	public function encode($method = advString::ENC_QP)
	{
	    switch($method)
	    {
	    	case advString::ENC_QP:
	    		return quoted_printable_encode($this->_value);
	    		break;
	    	
    		case advString::ENC_UU:
	    		return convert_uuencode($this->_value);
	    		break;
	    }
	}

	
	public function decode($method = advString::ENC_QP)
	{
	    switch($method)
	    {
	    	case advString::ENC_QP:
	    		return quoted_printable_decode($this->_value);
	    		break;

    		case advString::ENC_UU:
	    		return convert_uudecode($this->_value);
	    		break;
	    }
	}

    
}